/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.edu.ifrs.modelo;

import br.edu.ifrs.util.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author IFRS-Restinga
 */
public class Filme {

    private int id;
    private String nome;
    private String categoria;
    private String sinopse;
    private String nacionalidade;
    private int duracao;
    private int ano;
    private String diretor;
    private String elenco;

    public Filme() {
        this.id = 0;
        this.nome = "";
        this.categoria = "";
        this.sinopse = "";
        this.nacionalidade = "";
        this.duracao = 0;
        this.ano = 0;
        this.diretor = "";
        this.elenco = "";
    }

    public void inserir() throws Exception {
        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            // Conexão com o banco de dados
            con = Conexao.abrirConexao();

            // Criar o prepareStatement
            pstmt = con.prepareStatement("insert into Filme (nome, categoria, sinopse, nacionalidade, duracao, diretor, elenco, ano) values (?, ?, ?, ?, ?, ?, ?, ?)");

            // Setar os parâmetros o prepareStatement
            pstmt.setString(1, getNome());
            pstmt.setString(2, getCategoria());
            pstmt.setString(3, getSinopse());
            pstmt.setString(4, getNacionalidade());
            pstmt.setInt(5, getDuracao());
            pstmt.setString(6, getDiretor());
            pstmt.setString(7, getElenco());
            pstmt.setInt(8, getAno());

            // Executar o prepareStatement
            pstmt.execute();
        } catch (Exception ex) {
            throw new Exception("Falha na Classe Filme: " + ex.getMessage());
        } finally {
            pstmt.close();
            con.close();
        }
    }

    public void atualizar() throws Exception {
        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            // Conexão com o banco de dados
            con = Conexao.abrirConexao();

            // Criar o prepareStatement
            pstmt = con.prepareStatement("update Filme set nome = ?, categoria = ?, sinopse= ?, nacionalidade= ?, duracao = ?, diretor = ?, elenco = ?, ano = ?  where id = ?");

            // Setar os parâmetros o prepareStatement
            pstmt.setString(1, getNome());
            pstmt.setString(2, getCategoria());
            pstmt.setString(3, getSinopse());
            pstmt.setString(4, getNacionalidade());
            pstmt.setInt(5, getDuracao());
            pstmt.setString(6, getDiretor());
            pstmt.setString(7, getElenco());
            pstmt.setInt(8, getAno());
            pstmt.setInt(9, getId());

            // Executar o prepareStatement
            pstmt.execute();
        } catch (Exception ex) {
            throw new Exception("Falha na Classe Filme: " + ex.getMessage());
        } finally {
            pstmt.close();
            con.close();
        }
    }

    public void excluir() throws Exception {
        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            // Conexão com o banco de dados
            con = Conexao.abrirConexao();

            // Criar o prepareStatement
            pstmt = con.prepareStatement("delete from Filme where id = ?");

            // Setar os parâmetros o prepareStatement
            pstmt.setInt(1, getId());

            // Executar o prepareStatement
            pstmt.execute();
        } catch (Exception ex) {
            throw new Exception("Falha na Classe Filme: " + ex.getMessage());
        } finally {
            pstmt.close();
            con.close();
        }
    }

    public Filme[] consultar() throws Exception {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        ArrayList lista = new ArrayList();
        try {
            // Conexão com o banco de dados
            con = Conexao.abrirConexao();

            // Criar o prepareStatement
            pstmt = con.prepareStatement("select * from Filme order by nome ");
            // Setar os parâmetros o prepareStatement
            // Executar o prepareStatement
            rs = pstmt.executeQuery();
            // Gerar um array de cliente
            while (rs.next() == true) {
                Filme e;
                e = new Filme();
                e.setId(rs.getInt("id"));
                e.setNome(rs.getString("nome"));
                e.setCategoria(rs.getString("categoria"));
                e.setSinopse(rs.getString("sinopse"));
                e.setNacionalidade(rs.getString("nacionalidade"));
                e.setDuracao(rs.getInt("duracao"));
                e.setAno(rs.getInt("ano"));
                e.setDiretor(rs.getString("diretor"));
                e.setElenco(rs.getString("elenco"));
                

                lista.add(e);
            }
        } catch (Exception ex) {
            throw new Exception("Falha na Classe Filme: " + ex.getMessage());
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pstmt != null) {
                pstmt.close();
            }
            if (con != null) {
                con.close();
            }
        }

        return (Filme[]) lista.toArray(new Filme[0]);
    }

    public void buscarDados() throws Exception {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            // Conexão com o banco de dados
            con = Conexao.abrirConexao();

            // Criar o prepareStatement
            pstmt = con.prepareStatement("select * from Filme where id = ? ");
            // Setar os parâmetros o prepareStatement
            pstmt.setInt(1, getId());
            // Executar o prepareStatement
            rs = pstmt.executeQuery();
            // Gerar um array de cliente
            if (rs.next() == true) {
                this.setId(rs.getInt("id"));
                this.setNome(rs.getString("nome"));
                this.setCategoria(rs.getString("categoria"));
                this.setSinopse(rs.getString("sinopse"));
                this.setNacionalidade(rs.getString("nacionalidade"));
                this.setDuracao(rs.getInt("duracao"));
                this.setAno(rs.getInt("ano"));
                this.setDiretor(rs.getString("diretor"));
                this.setElenco(rs.getString("elenco"));
            }
        } catch (Exception ex) {
            throw new Exception("Falha na Classe Filme: " + ex.getMessage());
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pstmt != null) {
                pstmt.close();
            }
            if (con != null) {
                con.close();
            }
        }
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the categoria
     */
    public String getCategoria() {
        return categoria;
    }

    /**
     * @param categoria the categoria to set
     */
    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    /**
     * @return the sinopse
     */
    public String getSinopse() {
        return sinopse;
    }

    /**
     * @param sinopse the sinopse to set
     */
    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    /**
     * @return the nacionalidade
     */
    public String getNacionalidade() {
        return nacionalidade;
    }

    /**
     * @param nacionalidade the nacionalidade to set
     */
    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    /**
     * @return the duracao
     */
    public int getDuracao() {
        return duracao;
    }

    /**
     * @param duracao the duracao to set
     */
    public void setDuracao(int duracao) {
        this.duracao = duracao;
    }

    /**
     * @return the diretor
     */
    public String getDiretor() {
        return diretor;
    }

    /**
     * @param diretor the diretor to set
     */
    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    /**
     * @return the elenco
     */
    public String getElenco() {
        return elenco;
    }

    /**
     * @param elenco the elenco to set
     */
    public void setElenco(String elenco) {
        this.elenco = elenco;
    }

    /**
     * @return the ano
     */
    public int getAno() {
        return ano;
    }

    /**
     * @param ano the ano to set
     */
    public void setAno(int ano) {
        this.ano = ano;
    }

}
